package design.patterns.proxymode.staticProxy.controller;

import design.patterns.proxymode.staticProxy.service.*;

/**
 * @author ： cww
 * @date : 2018/7/5
 */
public class TaxyDemo {
    public static void main(String[] args) {
        //1.常规业务，汽车行驶，并且对行驶时间进行计时
        System.out.println("=========常规业务，汽车行驶，并计时===========");
        Car car = new Car();
        car.drive();

        System.out.println("=========使用静态代理对汽车行驶进行计时===========");
        //2.使用代理对汽车行驶进行计时
        CarProxy1 carProxy1 = new CarProxy1();
        carProxy1.drive();

        System.out.println("=========使用聚合代理对汽车行驶进行计时===========");
        CarStatic carStatic = new CarStatic();
        CarTogether carTogether = new CarTogether(carStatic);
        carTogether.drive();

        System.out.println("=========使用聚合代理优势demo===========");
        //使用继承方式的代理，每个业务实现都要新建一个代理类，而内部的代理功能顺序不同都要新建一个代理类
        //而使用聚合代理只需要新建相应代理业务都聚合了被代理类，只需要在实现的时候修改顺序即可，如下demo
        CarStatic carStatic1 = new CarStatic();
        CarTogetherTimeProxy carTogetherTimeProxy = new CarTogetherTimeProxy(carStatic1);
        CarTogetherLogProxy carTogetherLogProxy = new CarTogetherLogProxy(carTogetherTimeProxy);
        carTogetherLogProxy.drive();

    }
}
